home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 3 / Cream of the Crop 3.iso / comm / wnos5src.zip / N8250.H < prev    next >
Text File  |  1993-10-09  |  7KB  |  182 lines

  1. /* Various I/O definitions specific to asynch I/O on the IBM PC */
  2. #ifndef _N8250_H
  3. #define _N8250_H
  4.  
  5. #ifndef    _MBUF_H
  6. #include "mbuf.h"
  7. #endif
  8.  
  9. #ifndef _PROC_H
  10. #include "proc.h"
  11. #endif
  12.  
  13. #ifndef    _IFACE_H
  14. #include "iface.h"
  15. #endif
  16.  
  17. /* Output pseudo-dma control structure */
  18. struct dma {
  19.     char *data;                        /* current output pointer */
  20.     unsigned short cnt;                /* byte count remaining */
  21.     volatile char busy;                /* transmitter active */
  22. };
  23.  
  24. /* Read fifo control structure */
  25. struct fifo {
  26.     char *buf;                        /* Ring buffer */
  27.     unsigned bufsize;                /* Size of ring buffer */
  28.     char *wp;                        /* Write pointer */
  29.     char *rp;                        /* Read pointer */
  30.     volatile unsigned short cnt;    /* count of characters in buffer */
  31.     unsigned short hiwat;
  32.     long overrun;
  33. };
  34.  
  35. /* Asynch controller control block */
  36. struct asy {
  37.     struct iface *iface;
  38.     struct fifo fifo;
  39.     int trigchar;                    /* Fifo trigger character */
  40.     struct dma dma;
  41.     struct mbuf *sndq;                /* Transmit queue */
  42.     unsigned addr;                    /* Base I/O address */
  43.     unsigned vec;                    /* Interrupt vector */
  44.     long speed;                        /* Line speed */
  45.     struct {                        /* Previous configuration saved at startup */
  46.         INTERRUPT (*vec)(void);        /* Original interrupt vector [cs:pc] */
  47.         char mask;                    /* 8259 mask */
  48.         char divh;                    /* baud rate divisor */
  49.         char divl;
  50.         char lcr;                    /* line control reg */
  51.         char ier;                    /* Interrupt enable register */
  52.         char mcr;                    /* modem control bits */
  53.         char msr;                    /* modem status bits */
  54.     } save;
  55.     char is_16550a;                    /* 16550A detected */
  56.     char msr;
  57.     char cts;
  58.     char rlsd;
  59.     char chain;                        /* Do interrupt vector chaining */
  60.  
  61.     /* Dynamic dialup params */
  62.     char *actfile;                    /* Script to activate line */
  63.     char *dropfile;                    /* Script to drop line */
  64.     struct timer idle;                /* Idle timeout timer */
  65.     long originates;                /* Count of times we bring up the link */
  66.     long answers;                    /* Count of incoming calls */
  67.     long localdrops;                /* Count of times we dropped the link */
  68.     long remdrops;                    /* Count of times link dropped remotely */
  69.  
  70.     long fifotimeouts;                /* hw fifo character timeout int's */
  71.     long rxints;                    /* receive interrupts */
  72.     long txints;                    /* transmit interrupts */
  73.     long rxchar;                    /* Received characters */
  74.     long overrun;                    /* Receiver hardware overrun errors */
  75.     long txchar;                    /* Transmitted characters */
  76.     long rxhiwat;                    /* High water mark on hardware rx fifo */
  77.     long msint_count;                /* Count of modem status interrupts */
  78.     long txto;                        /* Count of TX interrupt timeouts */
  79. };
  80. extern struct asy Asy[];
  81.  
  82. #define    BAUDCLK    115200L                /* 1.8432 Mhz / 16 */
  83.  
  84. /* National 8250 asynch UART definitions */
  85. /* Control/status register offsets from base address */
  86. #define THR                 0x00    /* Transmitter holding register */
  87. #define RBR                 0x00    /* Receiver buffer register */
  88. #define DLL                 0x00    /* Divisor latch LSB */
  89. #define DLM                 0x01    /* Divisor latch MSB */
  90. #define IER                 0x01    /* Interrupt enable register */
  91. #define IIR                 0x02    /* Interrupt ident register */
  92. #define FCR                 0x02    /* FIFO control register (16550A only) */
  93. #define LCR                 0x03    /* Line control register */
  94. #define MCR                 0x04    /* Modem control register */
  95. #define LSR                 0x05    /* Line status register */
  96. #define MSR                 0x06    /* Modem status register */
  97.  
  98. /* 8250 Line Control Register */
  99. #define LCR_5BITS           0x00    /* 5 bit words */
  100. #define LCR_6BITS           0x01    /* 6 bit words */
  101. #define LCR_7BITS           0x02    /* 7 bit words */
  102. #define LCR_8BITS           0x03    /* 8 bit words */
  103. #define LCR_BIT_MASK        0x03    /* mask of bit size */
  104. #define LCR_NSB             0x04    /* Number of stop bits */
  105. #define LCR_PEN             0x08    /* Parity enable */
  106. #define    LCR_EPS                0x10    /* Even parity select */
  107. #define    LCR_SP                0x20    /* Stick parity */
  108. #define    LCR_SB                0x40    /* Set break */
  109. #define    LCR_DLAB            0x80    /* Divisor Latch Access Bit */
  110.  
  111. /* 8250 Line Status Register */
  112. #define LSR_DR              0x01    /* Data ready */
  113. #define LSR_OE              0x02    /* Overrun error */
  114. #define LSR_PE              0x04    /* Parity error */
  115. #define LSR_FE              0x08    /* Framing error */
  116. #define    LSR_BI                0x10    /* Break interrupt */
  117. #define    LSR_THRE            0x20    /* Transmitter line holding register empty */
  118. #define    LSR_TSRE            0x40    /* Transmitter shift register empty */
  119.  
  120. /* 8250 Interrupt Identification Register */
  121. #define IIR_IP              0x01    /* 0 if interrupt pending */
  122.  
  123. #define IIR_RLS             0x06    /* Receiver Line Status interrupt */
  124. #define IIR_RDA             0x04    /* Receiver data available interrupt */
  125. #define IIR_THRE            0x02    /* Transmitter holding register empty int */
  126. #define IIR_MSTAT           0x00    /* Modem status interrupt */
  127. #define IIR_ID_MASK         0x06    /* Mask for interrupt ID */
  128.  
  129. #define IIR_FIFO_TIMEOUT     0x08   /* FIFO timeout interrupt pending - 16550A */
  130. #define IIR_FIFO_ENABLED     0xc0    /* FIFO enabled (FCR0,1 = 1) - 16550A only */
  131.  
  132.  
  133. /* 8250 interrupt enable register bits */
  134. #define    IER_DAV                0x01    /* Data available interrupt */
  135. #define    IER_TxE                0x02    /* Tx buffer empty interrupt */
  136. #define    IER_RLS                0x04    /* Receive line status interrupt */
  137. #define    IER_MS                0x08    /* Modem status interrupt */
  138.  
  139. /* 8250 Modem control register */
  140. #define    MCR_DTR                0x01    /* Data Terminal Ready */
  141. #define    MCR_RTS                0x02    /* Request to Send */
  142. #define MCR_RFR             MCR_RTS /* Ready for receiving */
  143. #define    MCR_OUT1            0x04    /* Out 1 (not used) */
  144. #define    MCR_OUT2            0x08    /* Master interrupt enable (actually OUT 2) */
  145. #define    MCR_LOOP            0x10    /* Loopback test mode */
  146.  
  147. /* 8250 Modem Status Register */
  148. #define    MSR_DCTS             0x01    /* Delta Clear-to-Send */
  149. #define    MSR_DDSR             0x02    /* Delta Data Set Ready */
  150. #define    MSR_TERI             0x04    /* Trailing edge ring indicator */
  151. #define    MSR_DRLSD            0x08    /* Delta Rx Line Signal Detect */
  152. #define    MSR_CTS                0x10    /* Clear to send */
  153. #define    MSR_DSR             0x20    /* Data set ready */
  154. #define    MSR_RI                0x40    /* Ring indicator */
  155. #define    MSR_RLSD             0x80    /* Received line signal detect */
  156.  
  157. /* 16550A FIFO control register values */
  158. #define    FIFO_ENABLE            0x01    /* enable TX & RX fifo */
  159. #define    FIFO_CLR_RX            0x02    /* clear RX fifo */
  160. #define    FIFO_CLR_TX            0x04    /* clear TX fifo */
  161. #define    FIFO_START_DMA        0x08    /* enable TXRDY/RXRDY pin DMA handshake */
  162. #define FIFO_SIZE_1            0x00    /* RX fifo trigger levels */
  163. #define FIFO_SIZE_4            0x40
  164. #define FIFO_SIZE_8            0x80
  165. #define FIFO_SIZE_14        0xC0
  166. #define FIFO_SIZE_MASK        0xC0
  167.  
  168. #define FIFO_TRIGGER_LEVEL    FIFO_SIZE_8
  169. #define FIFO_SETUP     (FIFO_ENABLE|FIFO_CLR_RX|FIFO_CLR_TX|FIFO_TRIGGER_LEVEL)
  170.  
  171. #define OUTPUT_FIFO_SIZE    16
  172.  
  173. /* In asyvec.asm: */
  174. INTERRUPT asy0vec __ARGS((void));
  175. INTERRUPT asy1vec __ARGS((void));
  176. INTERRUPT asy2vec __ARGS((void));
  177. INTERRUPT asy3vec __ARGS((void));
  178. INTERRUPT asy4vec __ARGS((void));
  179. INTERRUPT asy5vec __ARGS((void));
  180.  
  181. #endif  /* _N8250_H */
  182.